using System;
using Microsoft.VisualStudio.Debugger.Interop;

namespace Microsoft.WowAddonStudio.Lua.RuntimeService.DebugEngine
{
    /// <summary>
    /// 
    /// </summary>
    public class LuaDebugProperty : IDebugProperty2, IDebugProperty
    {
        #region IDebugProperty2 Members

        public int GetPropertyInfo(uint dwFields, uint dwRadix, uint dwTimeout, IDebugReference2[] rgpArgs,
                                   uint dwArgCount, DEBUG_PROPERTY_INFO[] pPropertyInfo)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Sets the value of a property from a given string.
        /// </summary>
        /// <param name="pszValue">A string containing the value to be set.</param>
        /// <param name="dwRadix">A radix to be used in interpreting any numerical information. This can be 0 to attempt to determine the radix automatically.</param>
        /// <param name="dwTimeout">Specifies the maximum time, in milliseconds, to wait before returning from this method. Use INFINITE to wait indefinitely.</param>
        /// <returns>If successful, returns S_OK; otherwise returns error code. The following table shows other possible values:
        /// E_SETVALUE_VALUE_CANNOT_BE_SET  -   The string could not be converted into a property value, or the property value could not be set.
        /// E_SETVALUE_VALUE_IS_READONLY    -   The property is read-only.
        /// </returns>
        public int SetValueAsString(string pszValue, uint dwRadix, uint dwTimeout)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Sets the value as reference.
		/// </summary>
		/// <param name="rgpArgs">The RGP args.</param>
		/// <param name="dwArgCount">The dw arg count.</param>
		/// <param name="pValue">The p value.</param>
		/// <param name="dwTimeout">The dw timeout.</param>
		/// <returns></returns>
        public int SetValueAsReference(IDebugReference2[] rgpArgs, uint dwArgCount, IDebugReference2 pValue,
                                       uint dwTimeout)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Enums the children.
		/// </summary>
		/// <param name="dwFields">The dw fields.</param>
		/// <param name="dwRadix">The dw radix.</param>
		/// <param name="guidFilter">The GUID filter.</param>
		/// <param name="dwAttribFilter">The dw attrib filter.</param>
		/// <param name="pszNameFilter">The PSZ name filter.</param>
		/// <param name="dwTimeout">The dw timeout.</param>
		/// <param name="ppEnum">The pp enum.</param>
		/// <returns></returns>
        public int EnumChildren(uint dwFields, uint dwRadix, ref Guid guidFilter, ulong dwAttribFilter,
                                string pszNameFilter, uint dwTimeout, out IEnumDebugPropertyInfo2 ppEnum)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the parent.
		/// </summary>
		/// <param name="ppParent">The pp parent.</param>
		/// <returns></returns>
        public int GetParent(out IDebugProperty2 ppParent)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the derived most property.
		/// </summary>
		/// <param name="ppDerivedMost">The pp derived most.</param>
		/// <returns></returns>
        public int GetDerivedMostProperty(out IDebugProperty2 ppDerivedMost)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the memory bytes.
		/// </summary>
		/// <param name="ppMemoryBytes">The pp memory bytes.</param>
		/// <returns></returns>
        public int GetMemoryBytes(out IDebugMemoryBytes2 ppMemoryBytes)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the memory context.
		/// </summary>
		/// <param name="ppMemory">The pp memory.</param>
		/// <returns></returns>
        public int GetMemoryContext(out IDebugMemoryContext2 ppMemory)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the size.
		/// </summary>
		/// <param name="pdwSize">Size of the PDW.</param>
		/// <returns></returns>
        public int GetSize(out uint pdwSize)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the reference.
		/// </summary>
		/// <param name="ppReference">The pp reference.</param>
		/// <returns></returns>
        public int GetReference(out IDebugReference2 ppReference)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the extended info.
		/// </summary>
		/// <param name="guidExtendedInfo">The GUID extended info.</param>
		/// <param name="pExtendedInfo">The p extended info.</param>
		/// <returns></returns>
        public int GetExtendedInfo(ref Guid guidExtendedInfo, out object pExtendedInfo)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IDebugProperty Members

		/// <summary>
		/// Gets the property info.
		/// </summary>
		/// <param name="dwFieldSpec">The dw field spec.</param>
		/// <param name="nRadix">The n radix.</param>
		/// <param name="pPropertyInfo">The p property info.</param>
		/// <returns></returns>
        public int GetPropertyInfo(uint dwFieldSpec, uint nRadix, DebugPropertyInfo[] pPropertyInfo)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the extended info.
		/// </summary>
		/// <param name="cInfos">The c infos.</param>
		/// <param name="rgguidExtendedInfo">The rgguid extended info.</param>
		/// <param name="rgvar">The rgvar.</param>
		/// <returns></returns>
        public int GetExtendedInfo(uint cInfos, Guid[] rgguidExtendedInfo, object[] rgvar)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Sets the value as string.
		/// </summary>
		/// <param name="pszValue">The PSZ value.</param>
		/// <param name="nRadix">The n radix.</param>
		/// <returns></returns>
        public int SetValueAsString(string pszValue, uint nRadix)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Enums the members.
		/// </summary>
		/// <param name="dwFieldSpec">The dw field spec.</param>
		/// <param name="nRadix">The n radix.</param>
		/// <param name="refiid">The refiid.</param>
		/// <param name="ppepi">The ppepi.</param>
		/// <returns></returns>
        public int EnumMembers(uint dwFieldSpec, uint nRadix, ref Guid refiid, out IEnumDebugPropertyInfo ppepi)
        {
            throw new NotImplementedException();
        }

		/// <summary>
		/// Gets the parent.
		/// </summary>
		/// <param name="ppDebugProp">The pp debug prop.</param>
		/// <returns></returns>
        public int GetParent(out IDebugProperty ppDebugProp)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}